<?php
namespace Files\Model;
use Common\Model\CommonModel;
use Think\Image;

class FilesModel extends CommonModel{
	//自动验证
	protected $_validate = array(
			//array(验证字段,验证规则,错误提示,验证条件,附加规则,验证时间)
			array('uri', 'require', '文件的路径不能为空！', 1, 'regex', 3),
			array('file_type', 'require', '文件的类型不能为空！', 1, 'regex', 3),
	);
	//自动完成
	protected $_auto = array(
		array('create_time','mGetDate',CommonModel:: MODEL_INSERT,'callback'),
	);

	//用于获取时间，格式为2016-12-15 12:12:12,注意,方法不能为private
	function mGetDate() {
		return date('Y-m-d H:i:s');
	}

	/**
	 * 获取文件的详情，通过文件id
	 * @param $fileId
	 * @param string $fileds
	 * @return array|mixed
	 */
	public function getFileDetailsById($fileId,$fileds="*"){
		$pkId=$this->getPk();
		$file=$this->field($fileds)->where(array($pkId=>intval($fileId)))->find();
		empty($file) && $file=array();
		return $file;
	}

	/**
	 * 获取文件的类型
	 * @return array
	 */
	public function getFileTypes(){
		$types=$this->field(" file_category ")->group("file_category")->select();
		empty($types) && $types=array();
		$type_names=array("All");
		if($types){
			foreach ($types as $type) {
				array_push($type_names,$type['file_category']);
			}
		}
		return $type_names;
	}

	/**
	 * 保存文件信息到数据库
	 * @param $info
	 * @return bool
	 */
	public function setFile($info){
		//in_array($ext, array('gif','jpg','jpeg','bmp','png','swf'))
		empty($info['file_category']) && $info['file_category']="others";
		$data=array(
			'name'=>$info['name'],
			'title'=>$info['name'],
			'desc'=>$info['name'],
			'file_type'=>$info['type'],
			'file_category'=>$info['file_category'],
			'user_id'=>sp_get_current_admin_id(),
			'uri'=>$info['url'],
			'md5'=>$info['md5'],
			'file_size'=>$info['size'],
			'width'=>0,
			'height'=>0,
			'status'=>1,
		);
		if($info['file_category']=="image"){
			//获取图片的宽高
			$img=new Image();
			$rel_url=realpath(SITE_PATH.$info['url']);
			$data['index_img']=$data['uri'];
			if(file_exists($rel_url)) {
				$img->open($rel_url);
				$data['width'] = $img->width();
				$data['height'] = $img->height();
			}else{
				//文件不存在，则为无效
				$data['status']=0;
			}
		}
		//如果不存在文件，则不写入数据库
		if($data['status']==0){
			return true;
		}
		if($this->data($data)->add()===false){
			return false;
		}
		return true;

	}

	protected function _before_write(&$data) {
		parent::_before_write($data);
	}
}